home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 November / PCWorld_2005-11_cd.bin / software / vyzkuste / divfix / DivFix110.exe / Perl version / avistrip next >
Text File  |  2002-05-05  |  1KB  |  35 lines

  1. #!/usr/bin/env perl
  2.  
  3. die "Usage: $0 avifile ...\n" if $#ARGV < 0;
  4.  
  5. foreach $filename (@argv) {
  6.     open AVIFILE,"+<$filename"  or  die "Cannot open $filename: $!\n";
  7.     seek AVIFILE,8,0       or  die "Failed seeking to position 8 of $filename\n";
  8.     read AVIFILE,$chunkname,8;
  9.     if ($chunkname ne "AVI LIST") {
  10.         die "$filename: Not an AVI file\n";
  11.     }
  12.  
  13.     $pos=16;
  14.     $size=0;
  15.     do {
  16.         $pos += $size;
  17.         seek AVIFILE,$pos,0   or die "Failed seeking to position $pos in $filename\n";
  18.         if ((read AVIFILE,$nextsize,4) != 4) {  die "Couldn't read size at $pos in $filename\n"; }
  19.         $size = unpack "i",$nextsize;
  20.         if ((read AVIFILE,$chunkname,4) != 4) {  die "Couldn't read name at $pos in $filename\n"; }
  21.         $pos += 8;
  22.     } while ($chunkname ne "movi");
  23.  
  24.     $streamstart = $pos - 4;
  25.     $streamsize = $size;
  26.     if (($streamstart + $streamsize) / ( -s $filename) < 0.75) {
  27.         die "Refusing to truncate $filename at " . ($streamstart + $streamsize) . " - ratio suspiciously high\n";
  28.     }
  29.     truncate AVIFILE,$streamstart + $streamsize   or die "Cannot truncate index in $filename\n";
  30.     seek AVIFILE,$streamstart - 4,0                 or die "Cannot seek to start of stream in $filename, whatever that means\n";
  31.     print AVIFILE pack "i",$streamsize;
  32.     close AVIFILE;
  33. }
  34.  
  35.